var express = require('express')
var router = express.Router()
const { MongoClient } = require('mongodb')
const jwt = require('jsonwebtoken')

// const bodyParser = require('body-parser')//express框架自带

/* 主页 */
router.get('/index.html', function (req, res, next) {
  res.render('index.html')
})

/* 登录 */
router.get('/logIn.html', function (req, res, next) {
  res.render('logIn.html')
})

/* 注册 */
router.get('/register.html', function (req, res, next) {
  res.render('register.html')
})

// 登录验证中间件
const checkLogin = (req, res, next) => {
  if (req.session.uname && req.session.uid) {
    // 用户已经登录
    next()
  } else {
    // 用户未登录
    res.redirect('/logIn.html') // 重定向到登录页面
  }
}

/* 校园 */
router.get('/school.html', checkLogin, function (req, res, next) {
  res.render('school.html')
})

//主页显示全部数据
router.get('/test', function (request, response, next) {
  test((res) => {
    res
      .db('test')
      .collection('students')
      .find({})
      .toArray()
      .then((res) => {
        // response.json({
        //   code: '200',
        //   msg: '读取成功',
        //   data: res,
        // })
        response.send(res)
        //response.render('test', { data: res })
      })
  })
})

//链接Mongo
function test(success) {
  // 创建一个新的MongoClient连接池,而后连接到MongoDB服务器
  new MongoClient('mongodb://localhost:27017/test')
    .connect()
    .then((res) => {
      success(res)
    })
    .catch((err) => {
      if (err) {
        console.error('连接到MongoDB服务器失败:', err)
        return
      }
    })
}

//注册
router.post('/register', function (request, response, next) {
  test((res) => {
    res
      .db('test')
      .collection('user')
      .findOne({ uname: request.body.uname })
      .then((result) => {
        if (!result) {
          res
            .db('test')
            .collection('user')
            .insertOne({
              ...request.body,
              // uname: request.body.uname,
              // upassword: request.body.upassword,
            })
            .then((result) => {
              console.log(request.body.uname)
              console.log(result.insertedId)
              //注册成功后创建用户session，并将sessionID返回给作为cookie返回给浏览器做请求头
              //, 后续请求都将附带请求头,服务器端收到带sessionID的请求头后将ID给数据库处理，继续判断用户信息合格才允许请求继续
              request.session.uname = request.body.uname
              request.session.uid = result.insertedId

              //注册成功后创建用户token，并将token写入响应头Authorization返回给浏览器用户
              // let token = jwt.sign({ ...request.body }, 'bear', { expiresIn: 60 })
              // response.set('Authorization', `Bearer ${token}`)
              response.sendStatus(200)
              //response.cookie('name','xxxx',{maxAge:60*1000})//一分钟后自动删除cookie
            })
        } else {
          response.sendStatus(250)
        }
      })
      .catch((err) => {
        if (err) {
          response.sendStatus(400)
        }
      })
  })
})

// 中间件：验证token
// function authenticateToken(req, response, next) {
//   const authHeader = req.headers.authorization
//   const token = authHeader && authHeader.split(' ')[1]

//   if (!token) {
//     return response.json({
//       code: '401',
//       msg: '用户未登录',
//       data: null,
//     })
//   }

//   jwt.verify(token, 'bear', (err, data) => {
//     if (err) {
//       return response.json({
//         code: '400',
//         msg: '用户登录超时或出现问题',
//         data: null,
//       })
//     }
//     req.tokenData = data
//     next()
//   })
// }

// router.get('/testToken', authenticateToken, function (req, response) {
//   response.json({
//     code: '200',
//     msg: '用户xxx',
//     data: req.tokenData,
//   })
// })

//登录
router.post('/Login', function (request, response) {
  test((res) => {
    res
      .db('test')
      .collection('user')
      .findOne({
        // uname: request.body.uname,
        // upassword: request.body.upassword,
        ...request.body,
      })
      .then((result) => {
        if (result) {
          //登陆成功后创建用户session，并将sessionID返回给作为cookie返回给浏览器
          request.session.uname = result.uname
          request.session.uid = result._id
          response.sendStatus(200)
        } else {
          response.sendStatus(250)
        }
      })
      .catch((err) => {
        if (err) {
          response.sendStatus(400)
        }
      })
  })
})

module.exports = router
